package com.example.bbs.service;

import com.example.bbs.domain.entity.Post;
import com.example.bbs.domain.model.PostDTO;
import com.example.bbs.domain.model.PostVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface PostService {
    /**
     * 查询帖子详情数据（帖子数据+作者数据）
     *
     * @param postId
     * @return
     */
    PostDTO getPostDTO(String postId);


    /**
     * 查询帖子数据
     *
     * @param postId
     * @return
     */
    Post getPostByPostId(String postId);


    /**
     * 查询最新帖子列表
     *
     * @param page
     * @param limit
     * @return
     */
    PostVO getTheLatestPostInfoList(int page, int limit);


    /**
     * 查询最热帖子列表
     *
     * @param page
     * @param limit
     * @return
     */
    PostVO getTheHottestPostInfoList(int page, int limit);


    /**
     * 统计帖子浏览量
     */
    void incrPostViewCount(String postId, HttpServletRequest request);


    /**
     * 查询帖子实时排行（每个小时更新一次）
     */
    List<Post> getHourHotPostRank();


    /**
     * 查询帖子日排行
     */
    PostVO getDayHotPostRank();

    /**
     * 查询帖子周排行
     */
    PostVO getWeekHotPostRank();

    /**
     * 收集帖子数据
     * @param postId
     */
    void addChangedPostSet(String postId);


    /**
     * 新增帖子
     *
     * @param post
     * @return
     */
    void save(Post post);

    void saveCache(Post post);

    /**
     * 修改帖子信息
     *
     * @param post
     */
    void update(Post post);

    void updateCache(Post post);

    /**
     * 删除缓存中的帖子
     *
     * @param postId
     */
    void deleteCache(String postId);

    /**
     * 加精帖子
     *
     * @param postId
     */
    void setWonderful(String postId);

    /**
     * 置顶帖子
     *
     * @param postId
     */
    void setTop(String postId);
}
